# -*- coding: utf-8 -*-
'''
@author Giang NH
@update 27/7/2011
'''

import urllib, cStringIO as StringIO
import mechanize
import commonlib, time, re, workerpool
import traceback, datetime, os
from MongoDbLog import MongoDbLog
from MongoModel import MongoModel
from lxml import etree
from termcolor import cprint
from mechanize import Browser


LOG = MongoDbLog("VnThuQuan", "debug")

MONGO_SERVER = 'beta.mana.vn'
MONGO_PORT = 27017
MAX_DUPLICATED = 30

PREFIX = '/uploads/cdm/'
DOWNLOAD_PATH = '/home/hoangnamhai/HarvestedData/congdongmang'

cj = mechanize.LWPCookieJar()

def foreceQuit():
    pid = os.getpid()
    os._exit(1)
    os.kill(pid, 9)

def browser(url, data={}):
    br = Browser()
    br.set_cookiejar(cj)
    br.set_handle_gzip(True)
    br.set_handle_redirect(True)
    br.addheaders = [("User-Agent", "Mozilla/5.0 (X11; Linux i686; rv:5.0) Gecko/20100101 Firefox/5.0")]
    response = None
    if len(data) > 0:
        query = urllib.urlencode(data)
        response = br.open(url, query)
    else:
        response = br.open(url)
    return br, response

def buildTree(html):
    parser = etree.HTMLParser(encoding='utf-8')
    return etree.parse(StringIO.StringIO(html), parser)

class VNThuQuan(MongoModel):
    
    categories = {1: {'name': 'Truyện ngắn', 'col': 'truyenngan'},
        2: {'name': 'Truyện dài', 'col': 'truyendai'},
        3: {'name': 'Bài viết', 'col': 'baiviet'},
        4: {'name': 'Lịch sử', 'col': 'lichsu'},
        5: {'name': 'Cổ tích', 'col': 'cotich'},
        6: {'name': 'Kiếm hiệp', 'col': 'kiemhiep'},
        7: {'name': 'Trung hoa', 'col': 'trunghoa'},
        8: {'name': 'Tiếu lâm', 'col': 'tieulam'},
        9: {'name': 'Khoa học', 'col': 'khoahoc'},
        10: {'name': 'Tuổi học trò', 'col': 'tuoihoctro'},
        11: {'name': 'Kinh dị, Ma quái', 'col': 'kinhdimaquai'},
        12: {'name': 'Trinh thám, Hình sự', 'col': 'trinhthamhinhsu'},
        13: {'name': 'Cổ văn Việt Nam', 'col': 'covanvietnam'},
        14: {'name': 'Tập truyện ngắn', 'col': 'taptruyenngan'},
        15: {'name': 'Suy ngẫm, Làm người', 'col': 'suyngamlamnguoi'},
        16: {'name': 'Nhân vật lịch sử', 'col': 'nhanvatlichsu'},
        17: {'name': 'Triết học, Kinh tế', 'col': 'triethockinhte'},
        18: {'name': 'Y học, Sức khỏe', 'col': 'yhocsuckhoe'},
        19: {'name': 'Tình cảm, Xã hội', 'col': 'tinhcamxahoi'},
        20: {'name': 'Phiêu lưu, Mạo hiểm', 'col': 'phieuluumaohiem'},
        21: {'name': 'Hồi ký, Tùy bút', 'col': 'hoikytuybut'},
        22: {'name': 'VH Cổ điển nước ngoài', 'col': 'codiennuocngoai'},
        23: {'name': 'Tiểu thuyết', 'col': 'tieuthuyet'},
        24: {'name': 'Tôn giáo, Chính trị', 'col': 'tongiaochinhtri'},
        26: {'name': 'Cuộc chiến VN', 'col': 'cuocchienvn'},
        27: {'name': 'Kịch, Kịch bản', 'col': 'kichban'},
        28: {'name': 'Khoa học Huyền bí', 'col': 'khoahochuyenbi'},
        }
    
    def __init__(self, host, port):
        MongoModel.__init__(self, host, port)
        
    def getDetailStory(self, url):
        LOG.debug('start getDetailStory(url={0})'.format(url))
        
    
    def getListStoryByCategory(self, url):
        data = {}
        currentDuplicated = 0
        try:
            while currentDuplicated <= MAX_DUPLICATED:
                br, res = browser(url, data)
                br.select_form(name='ctl05')
                html = res.read()
                tree = buildTree(html)
                
                fbreak = False
                for item in tree.xpath("//table[@id='DataGrid1']//tr[position()<last()]/td[1]/a"):
                    if currentDuplicated > MAX_DUPLICATED:
                        LOG.info("Trùng quá ngưỡng {0} cho phép".format(MAX_DUPLICATED))
                        cprint("Trùng quá ngưỡng {0} cho phép".format(MAX_DUPLICATED), 'red')
                        fbreak = True; break
                    link = commonlib.getAttribText(item, 'href')
                    link = commonlib.urlJoin(url, link) if link != '' else ''
                    if link == '': continue
                    title = commonlib.getElementText(item)
                    author = commonlib.getElementText(item.xpath("../following-sibling::*[1]/a"))
                    print '-------------------------------------------------------------------------------'
                    print "Name: {0}".format(title)
                    print "Author: {0}".format(author)
                    print "Link: {0}".format(link)
                    print '-------------------------------------------------------------------------------'
                    
                    
                    
                if fbreak: break
                nextNode = tree.xpath("//table[@id='DataGrid1']//tr[last()]/td/span/following-sibling::*[1]")
                if len(nextNode) == 0: break
                href = nextNode[0].get('href', '')
                pat = r"\('(.+)',"
                href = commonlib.extractWithRegEx(pat, href, 1)
                data = {'__EVENTTARGET': '{0}'.format(href), 
                    '__EVENTARGUMENT': '', 
                    '__VIEWSTATE': '''{0}'''.format(br['__VIEWSTATE']),
                    '__EVENTVALIDATION': br['__EVENTVALIDATION']
                    }
                print '********************************************'
                print 'DEBUG: Next page: {0}'.format(nextNode[0].text)
                print '********************************************'
                
        except:
            LOG.error(traceback.format_exc())
        
    
    
if __name__ == '__main__':
    
    vnthuquan = VNThuQuan(MONGO_SERVER, MONGO_PORT)
    vnthuquan.getListStoryByCategory('http://www.vnthuquan.net/truyen/theloai.aspx?theloaiid=1')
    
    foreceQuit()
    
    
